#include "htexture.h"

//-----------------------------------------------------Constructeurs et destructeurs-----------------------------------------------------//

/****************************************************************************
 * Constructeur par défault                                                 *
 ****************************************************************************/
HTexture::HTexture()
{
    _texture = NULL;
    _nomTexture = "";
    _coordonneesTextures_auto = false;
}

/****************************************************************************
 * Constructeur à 1 paramètre                                               *
 * @param nomTexture : le nom de la texture dans les ressources             *
 * param coordAuto : indique si on calcule les coordonnées textures en auto *
 ****************************************************************************/
HTexture::HTexture(QString nomTexture,  bool coordAuto)
    : _coordonneesTextures_auto(coordAuto)
{
    _nomTexture = nomTexture;
    _texture = &GestionnaireTextures::getInstance().getTexture(nomTexture);
}


/****************************************************************************
 * Destructeur                                                              *
 ****************************************************************************/
HTexture::~HTexture()
{
    //NOTE : NE PAS DELETE _texture. Géré dans le gestionnaireTextures
}

//---------------------------------------------------------------Méthodes----------------------------------------------------------------//

/****************************************************************************
 * On utilise l'habillage texture                                           *
 ****************************************************************************/
void HTexture::utiliser()
{
    glEnable(GL_TEXTURE_2D);

    //En fonction du mode de placage
    if(_coordonneesTextures_auto)
    {
        glEnable(GL_TEXTURE_GEN_S);
        glEnable(GL_TEXTURE_GEN_T);

        glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
        glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
    }
    else
    {
        glDisable(GL_TEXTURE_GEN_S);
        glDisable(GL_TEXTURE_GEN_T);
    }

    //On configure l'environement pour que la texture ne prenne pas en compte la couleur courante
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

    if(_texture != NULL)
        _texture->utiliser();
}

//---------------------------------------------------------------Accesseurs--------------------------------------------------------------//


//------------------------------------------------------Surcharge des opérateurs---------------------------------------------------------//


